Parsec for teamsで監査ログをダウンロードして中身を確認してみる
先月になりますが、Parsec for teamsで監査ログがダウンロードできるようになりました。
Team内のすべてのParsecユーザー接続とすべての管理アクションがログイベントとして記録されるようになっています。
ダウンロード方法
ダッシュボードから
Parsecのダッシュボードにログインし、Audit Logs
のページのダウンロードボタンから実行できます。
JSON形式で提供されていて、7日間の履歴と最大5000のイベントに制限されています
APIを使う
Enterpriseアドオンを購入している場合、APIを使って履歴に制限を設けることなくダウンロードが可能です。
アクセス例
curl https://api.parsec.app/v1/teams/{teamID}/events?limit=10 \ -H 'Authorization: Bearer {apiKey}'
必須パラメーター
- teamID
- parsec for teamsのID
- apiKey
- Parsec for Teamsのダッシュボードから作成する
- limit
- 取得したいイベントの件数(1 ~ 1000まで)
オプションパラメーター
- start_at
- この日付時間以降に発生したイベントのみを対象とする (date-time)
- end_at
- この日付時間以前に発生したイベントのみを対象とする (date-time)
- user_id
- このuser_idを持つイベントのみを対象とする (integer)
- event_names
- これらの名前(コンマで区切られている)を持つイベントのみを対象とする(array of string)
- cursor
- ページングを開始する最初のイベントのID(含)
- after
- ページングを開始する最初のイベントのID(排)
レスポンス例
{ "data": [ { "id": "1sn61hB1dYM1IWxTuJynYdzbwNs", "name": "team_create", "timestamp": "2021-05-20T07:29:52.049Z", "user_id": 6181803, "team_id": "1sn61992rNstjlDoJWnFXRRkxPZ", "data": { "app_version": "", "client_peer_id": "1rjwCb437qXsFaHsR49UNnYJQYt", "client_type": "", "host_peer_id": "1rjwCVNMenFvGDzavBH8rnym2h6", "ip": "150.249.249.19", "os": "macos", "team_id": "1sn61992rNstjlDoJWnFXRRkxPZ", "team_name": "cm", "team_seats": 5 }, "user_email": "mori.ryosuke@classmethod.jp" },
ログの形式
{ data* [{ id*: string name*: string timestamp*: date-time user_id*: integer team_id*: string data* { Event data } user_email: string }] next_cursor*: string }
メインデータ
項目 | 説明 |
---|---|
id | イベントID |
name | 実行されたアクションの名前 |
timestamp | イベントが記録された時間 |
user_id | イベントを記録したアクションを実行したユーザーのID |
team_id | チームのID |
user_email | イベントを記録したアクションを実行したユーザーの電子メール |
data | 各イベントに固有のプロパティ |
next_cursor | イベントの次のページのカーソルです。空の場合:取得できるイベントはもうありません。 |
接続イベント
クライアントがホストに接続すると、いくつかのイベントが記録されます。 該当する場合は常に、クライアントの観点とホストの観点の両方から接続イベントが記録されます
いくつか例をあげると
name | 説明 |
---|---|
conn_client_offer | クライアントがホストへの接続を要求しました。 |
conn_signal_offer_relayed | バックエンドは、ホストに接続するというクライアントの提案を承認して中継しました。 |
p2p_client_complete | 接続の試行が完了しました(成功または失敗)。ステータスについては、データ列のexit_codeを参照してください。 |
p2p_host_complete | 接続の試行が完了しました(成功または失敗)。ステータスについては、データ列のexit_codeを参照してください。 |
client_disconnect | クライアントの接続は終了しました。ステータスについては、データ列のexit_codeを参照してください。 |
client_disconnect | ホストの接続は終了しました。ステータスについては、データ列のexit_codeを参照してください。 |
このようなものがname
に記載されているはずです
終了コードに関してはここを参照。
データプロパティ
data
キーの中には以下のような情報が含まれます。
name | 説明 |
---|---|
attempt_id | 試行IDは、各Parsecピアツーピア接続の期間中永続する一意のIDです。 |
host_user_id | 接続イベントにおけるホストのユーザーID。共有チームコンピュータの場合、これは0になります。 |
host_peer_id | ホストピアIDは、ユーザーがデバイスにログインしている限り永続的ですが、ユーザーがログアウトしてから同じデバイスに再度ログインすると変更される可能性があります。 |
client_user_id | 接続イベントにおけるクライアントのユーザーID。 |
client_peer_id | クライアントピアIDは、ピアツーピア接続間で永続性を維持するために信頼されるべきではありません。 |
ipやos,platformなどの情報も含まれていました。
例)
"app_version": "150-78", "attempt_id": "000e7777-576639b2-a60ec436-e4736baa-84546301-027ac414", "client_computer_name": "", "client_peer_id": "1vvpHWInaJ8yjxgqeH8N2gOJFoW", "client_user_id": 6181803, "connecting_to_self": false, "duration": 4, "exit_code": 0, "host_computer_name": "ec2-parsec-host", "host_is_shared_team_computer": true, "host_is_team_computer": true, "host_peer_id": "2053mKvtaKDpVtdOAjic8oasiXu", "host_user_id": 0, "ip": "1.2.3.4", "os": "Windows", "os_version": "10", "platform": "windows"
トラブルシューティングや可視化などに使えるので、チーム管理者にとってはありがたい機能だと思います。
現状ではダウンロードだけですが、外部に保存して解析などを行うには、 APIで定期的に取得してどこかのストレージサービスやログ解析サービスに保存する といったやり方が現状だと現実的でしょうか。
ログビューワーが実装されたり、他のサービス(AWSやGoole Cloudなど)とのインテグレーションが提供されるともっと使い勝手が良くなるかもしれませんね。